import { defineConfig, loadEnv } from 'vite';
import vue from '@vitejs/plugin-vue';
import postcsspxtoviewport from 'postcss-px-to-viewport-8-plugin';
import { createStyleImportPlugin } from 'vite-plugin-style-import';
import { resolve } from 'path';
import Components from 'unplugin-vue-components/vite';
import { VantResolver } from '@vant/auto-import-resolver';
// https://vitejs.dev/config/
const _time = new Date().getTime();
export default ({ command, mode }) => {
  const ENV = loadEnv(mode, process.cwd());
  return defineConfig({
    plugins: [
      vue(),
      createStyleImportPlugin({}),
      Components({
        resolvers: [VantResolver()],
      }),
    ],
    resolve: {
      alias: {
        '@': resolve('src'),
        '@img': resolve('src/assets/images'),
        comps: resolve('src/components'),
      },
      dedupe: ['vue'],
    },
    css: {
      preprocessorOptions: {
        scss: {
          // 配置 nutui 全局 scss 变量
          // additionalData: `@import "@nutui/nutui/dist/styles/variables.scss";`,
        },
      },
      postcss: {
        plugins: [
          postcsspxtoviewport({
            unitToConvert: 'px', // 需要转换的单位，默认为"px"
            viewportWidth: 375, // 设计稿的视口宽度
            unitPrecision: 5, // 单位转换后保留的精度
            propList: ['*'], // 能转化为vw的属性列表
            viewportUnit: 'vw', // 希望使用的视口单位
            fontViewportUnit: 'vw', // 字体使用的视口单位
            selectorBlackList: ['vant'], // 需要忽略的CSS选择器，不会转为视口单位，使用原有的px等单位。
            minPixelValue: 1, // 设置最小的转换数值，如果为1的话，只有大于1的值会被转换
            mediaQuery: false, // 媒体查询里的单位是否需要转换单位
            replace: true, //  是否直接更换属性值，而不添加备用属性
            exclude: [/node_modules/], // 忽略某些文件夹下的文件或特定文件，例如 'node_modules' 下的文件
            include: undefined, // 如果设置了include，那将只有匹配到的文件才会被转换
            landscape: true, // 是否添加根据 landscapeWidth 生成的媒体查询条件 @media (orientation: landscape)
            landscapeUnit: 'vw', // 横屏时使用的单位
            landscapeWidth: 750, // 横屏时使用的视口宽度
          }),
        ],
      },
    },
    server: {
      host: '0.0.0.0',
      port: 8081,
      proxy: {
        [ENV.VITE_APP_BASE_API]: {
          target:
            mode === 'development'
              ? ENV.VITE_APP_TARGET_URL
              : `http://localhost:` + ENV.VITE_APP_BASE_PORT,
          changeOrigin: true,
          rewrite: (path) => path.replace(ENV.VITE_APP_BASE_API, ''),
          // bypass(req, res, options) {
          //   const realUrl = options.target + (options.rewrite ? options.rewrite(req.url) : '');
          //   res.setHeader('x-res-proxyUrl', realUrl); // 查看真实请求地址
          // },
        },
      },
    },
    build: {
      // 打包路径
      assetsDir: './static_' + _time,
      minify: 'esbuild',
      terserOptions: {
        compress: {
          keep_infinity: true,
          drop_debugger: true,
          drop_console: true,
        },
      },
      rollupOptions: {
        output: {
          entryFileNames: `static_${_time}/js/[name]-[hash].js`,
          chunkFileNames: `static_${_time}/js/[name]-[hash].js`,
          assetFileNames: `static_${_time}/[ext]/[name]-[hash].[ext]`,
          manualChunks(id) {
            if (id.includes('node_modules')) {
              return id.toString().split('node_modules/')[1].split('/')[0].toString();
            }
          },
        },
      },
    },
  });
};
